Software defined networking (SDN) is an approach to networking that enables applications to communicate with and manipulate the control software of network devices and resources. A key aspect of SDN is the abstraction between the forwarding and the control/management planes in order to separate them and provide applications with the means necessary to control the network. This separation provides faster innovation cycles at both planes.
In SDN, the control plane and the forwarding plane communicate via a southbound interface using protocols such as Forwarding and Control Element Separation (ForCES), Network Configuration Protocol (NETCONF), and Interface to the Routing System (I2RS). Through the southbound interface, the control plane manages the forwarding plane behavior by manipulating the corresponding forwarding tables.
A conventional forwarding plane includes a pipeline of functional blocks to handle packets from ingress to egress. The corresponding forwarding tables attached to the functional blocks include ingress/egress Access Control List (ACL), Forwarding Information Base (FIB), Label Forwarding Information Base (LFIB), etc.
Typically, FIBs are implemented in Ternary Content Addressable Memories (TCAMs). The FIB Internet Protocol (IP) prefixes are grouped together based on their prefix lengths and stored in the TCAMs. Although the lookup performance of TCAMs is high, adding an IP prefix entry to the TCAM can be quite slow because it may require IP prefix entries in the TCAM to be moved in order to maintain the IP prefix length grouping. A conventional approach to minimizing IP prefix entry movement is to reserve a number of blank entries for each IP prefix length group. The number of blank entries to reserve for each IP prefix length, however, is not known by the forwarding plane. Without such information, the forwarding plane either over reserves the number of blank entries, in which case memory is wasted. Conversely, the forwarding plane may under reserve the number of blank entries, in which case, IP prefix entry movement is required and update performance is low.
FIBs may also be implemented as trie trees that are stored in Random Access Memories (RAMs). Typically, trie trees include multiple levels of nodes. The performance of these trie trees depends on their strides. As used herein, a “stride” refers to the amount of information (e.g., the number of bits) that is compared/searched during each step (i.e., at each level of the trie tree). By increasing the strides, the performance of trie trees can be increased. Increasing strides, however, also increases hardware resources (e.g., memory) consumption. The strides of trie trees can be specifically tailored (i.e., designed) to improve performance while keeping resource consumption to a minimal if the number of IP prefixes in each IP prefix length group is known by the forwarding plane. In a conventional network architecture, such IP prefix distribution information is not available to the forwarding plane.
ACL rules are also commonly implemented in TCAMs. The rules are grouped together in the TCAM based on their priorities, and are placed in order. Although the lookup performance of TCAMs is high, adding a rule to the TCAM can be quite slow because the rules in the TCAM may have to be moved in order preserve their priorities. Conventionally, blank entries are reserved in the TCAM in order to avoid moving the rules when a new rule is added. The number of blank entries to reserve for each priority group, however, is not known by the forwarding plane. Without such information, the forwarding plane either over reserves the number of blank entries, in which case memory is wasted. Conversely, the forwarding plane may under reserve the number of blank entries, in which case, rule movement is required and update performance is low.